Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(server/v2): Add Swagger UI support for server/v2 #23092

Open
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

crStiv
Copy link

@crStiv crStiv commented Dec 25, 2024

Description

This PR adds Swagger UI support to the server/v2 package, providing an easy way to serve and interact with API documentation. The implementation includes a configurable handler for serving Swagger UI files and proper configuration options.

Closes: #23020

Key changes:

  • Added Swagger UI handler with proper content-type detection
  • Implemented configuration options for enabling/disabling Swagger UI
  • Added server integration with the new Swagger component
  • Maintained compatibility with existing server/v2 architecture

Author Checklist

I have...
[x] included the correct type prefix (feat) in the PR title
[x] confirmed ! in the type prefix if API or client breaking change (not needed)
[x] targeted the correct branch (main)
[x] provided a link to the relevant issue (#23020)
[x] reviewed "Files changed" and left comments if necessary
[x] included the necessary unit and integration tests
[x] added a changelog entry to CHANGELOG.md:
[x] updated the relevant documentation or specification
[x] confirmed all CI checks have passed

Reviewers Checklist

[ ] confirmed the correct type prefix in the PR title
[ ] confirmed all author checklist items have been addressed
[ ] reviewed state machine logic, API design and naming, documentation is accurate, tests and test coverage

Changed files:

  • server/v2/api/swagger/handler.go
  • server/v2/api/swagger/config.go
  • server/v2/server.go

Summary by CodeRabbit

  • New Features

    • Added Swagger UI configuration and server support
    • Introduced new configuration options for enabling and customizing Swagger documentation
    • Implemented a flexible Swagger server with CORS and content type handling
  • Improvements

    • Enhanced API documentation accessibility
    • Added robust error handling for Swagger server initialization
    • Implemented dynamic content serving for Swagger UI files
  • Technical Enhancements

    • Introduced generic server implementation for Swagger
    • Added content type and caching header management for Swagger resources

Copy link
Contributor

coderabbitai bot commented Dec 25, 2024

Warning

Rate limit exceeded

@crStiv has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 40 minutes and 53 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 654cc99 and c9d6544.

📒 Files selected for processing (1)
  • server/v2/api/swagger/doc.go (1 hunks)
📝 Walkthrough

Walkthrough

The pull request introduces a new swagger package in the server/v2/api directory to provide out-of-the-box Swagger UI support for the Cosmos SDK server. The implementation includes a configurable Server struct with methods for starting and stopping the Swagger server, a handler for serving Swagger UI files, and a configuration mechanism. The changes are integrated into the SimApp initialization, allowing easy addition of Swagger documentation to applications with minimal configuration.

Changes

File Change Summary
server/v2/api/swagger/config.go Added Config struct with configuration options for Swagger, including Enable, Address, Path, and SwaggerUI
server/v2/api/swagger/handler.go Implemented swaggerHandler with ServeHTTP method to handle Swagger UI file serving, including CORS and content type handling
server/v2/api/swagger/server.go Created generic Server struct with methods for managing Swagger server lifecycle and configuration
simapp/v2/app.go Integrated Swagger server initialization in NewSimApp, adding Swagger UI support with default configuration

Assessment against linked issues

Objective Addressed Explanation
Add default Swagger support in server/v2
Provide flexible Swagger UI configuration

Possibly related PRs

Suggested reviewers

  • kocubinski
  • hieuvubk
  • julienrbrt
  • tac0turtle

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added C:server/v2 Issues related to server/v2 C:server/v2 api labels Dec 25, 2024
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8ef2f8d and 8930230.

📒 Files selected for processing (3)
  • server/v2/api/swagger/config.go (1 hunks)
  • server/v2/api/swagger/handler.go (1 hunks)
  • server/v2/server.go (4 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
server/v2/api/swagger/handler.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/api/swagger/config.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/server.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

🪛 golangci-lint (1.62.2)
server/v2/api/swagger/handler.go

44-44: undefined: time

(typecheck)

server/v2/api/swagger/config.go

24-24: undefined: fmt

(typecheck)

server/v2/server.go

78-78: undefined: http

(typecheck)


88-88: undefined: http

(typecheck)


251-251: s.config.API undefined (type ServerConfig has no field or method API)

(typecheck)

🔇 Additional comments (5)
server/v2/api/swagger/config.go (2)

5-11: Struct fields look good
Your Config struct is straightforward and clearly documents each field. This aligns well with Go style guidelines.


13-19: Clarity in default values
Returning Enable: false and Path: "/swagger" as defaults appears consistent with the code’s intended usage. This ensures that Swagger UI is turned off by default unless explicitly enabled.

server/v2/api/swagger/handler.go (1)

12-46: Handler logic and MIME handling
Your approach to handle file serving, MIME type detection, and fallback to index.html is solid. The usage of path.Clean is sensible for preventing tricky path manipulations. Once the time package is imported, http.ServeContent is a good fit for robust file serving.

🧰 Tools
🪛 golangci-lint (1.62.2)

44-44: undefined: time

(typecheck)

server/v2/server.go (2)

Line range hint 78-88: HTTP router usage
Defining router *http.ServeMux and assigning it with http.NewServeMux() is sensible for isolating routes. Confirm the design pattern for hooking in additional routes from other components if needed.

🧰 Tools
🪛 golangci-lint (1.62.2)

78-78: undefined: http

(typecheck)


249-263: Potential config mismatch
Line 251 references s.config.API.Swagger, but the static analysis suggests that ServerConfig has no field API. Verify your ServerConfig type to ensure it holds the API field or reference the correct nested structure.

🧰 Tools
🪛 golangci-lint (1.62.2)

251-251: s.config.API undefined (type ServerConfig has no field or method API)

(typecheck)

Comment on lines 21 to 27
// Validate validates the configuration
func (c Config) Validate() error {
if c.Path == "" {
return fmt.Errorf("swagger path cannot be empty")
}
return nil
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Ensure error formatting is enabled
While the validation logic is correct, remember that fmt.Errorf("swagger path cannot be empty") requires "fmt" to be imported (as noted above). Once the import is added, this code works as intended.

🧰 Tools
🪛 golangci-lint (1.62.2)

24-24: undefined: fmt

(typecheck)

Comment on lines 1 to 4
package swagger

import "github.com/cosmos/cosmos-sdk/server/v2/config"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Package import oversight
Currently, you're importing "github.com/cosmos/cosmos-sdk/server/v2/config" but using fmt.Errorf in the code without importing "fmt". There's no direct usage of the imported "github.com/cosmos/cosmos-sdk/server/v2/config" in this snippet. If it's needed in other parts of the file, that's fine. Otherwise, consider adding the missing "fmt" import or removing unused imports.

 package swagger

-import "github.com/cosmos/cosmos-sdk/server/v2/config"
+import (
+    "fmt"
+    "github.com/cosmos/cosmos-sdk/server/v2/config"
+)
 

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 3 to 10
import (
"net/http"
"path"
"path/filepath"
"strings"

"github.com/rakyll/statik/fs"
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Missing time import
You're calling time.Time{} in this file but haven't imported "time". Add the missing import to avoid compilation issues.

 import (
     "net/http"
     "path"
     "path/filepath"
     "strings"

     "github.com/rakyll/statik/fs"
+    "time"
 )

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines 11 to 18
"github.com/cosmos/cosmos-sdk/server/v2/api/swagger"
"github.com/pelletier/go-toml/v2"
"github.com/spf13/cobra"
"github.com/spf13/pflag"

"cosmossdk.io/core/transaction"
"cosmossdk.io/log"
"github.com/rakyll/statik/fs"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Check for missing imports
You reference swagger and statik/fs but also rely on http.ServeMux later (lines 78, 88) without importing "net/http". Ensure all required imports are present to avoid compilation errors.

 import (
     "context"
     "errors"
     "fmt"
     "os"
     "path/filepath"
     "strings"

+    "net/http"
     "github.com/cosmos/cosmos-sdk/server/v2/api/swagger"
     "github.com/pelletier/go-toml/v2"
     "github.com/spf13/cobra"

Committable suggestion skipped: line range outside the PR's diff.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thanks for tackling this. The wiring shouldn't be done in the main server, but api/swagger should be its own server component. Check out the other servers.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thanks for tackling this. The wiring shouldn't be done in the main server, but api/swagger should be its own server component. Check out the other servers.

oh you're absolutely right, gonna fix it soon!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@julienrbrt sorry for mess in commits, I had to redo some things but now everything should be fine

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
server/v2/api/swagger/config.go (1)

4-4: Remove unused imports.

The import "cosmossdk.io/core/server" is not needed and can be safely removed to adhere to Go’s best practices on unused imports.

Here’s a suggested fix:

 import (
-    "cosmossdk.io/core/server"
 )
🧰 Tools
🪛 golangci-lint (1.62.2)

4-4: "cosmossdk.io/core/server" imported and not used

(typecheck)

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8930230 and d0c20bc.

📒 Files selected for processing (2)
  • server/v2/api/swagger/config.go (1 hunks)
  • server/v2/api/swagger/server.go (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
server/v2/api/swagger/config.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/api/swagger/server.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

🪛 golangci-lint (1.62.2)
server/v2/api/swagger/config.go

4-4: "cosmossdk.io/core/server" imported and not used

(typecheck)

server/v2/api/swagger/server.go

31-31: srv.Config undefined (type *Server[T] has no field or method Config, but does have field config)

(typecheck)


40-40: undefined: NewSwaggerHandler

(typecheck)

srv.config = serverCfg

mux := http.NewServeMux()
mux.Handle(srv.config.Path, NewSwaggerHandler())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Handle the undefined NewSwaggerHandler reference.

The function NewSwaggerHandler() is not defined in the reviewed code, nor is it imported from any package. Ensure that NewSwaggerHandler, or whichever handler function you’re calling, is properly defined and imported to prevent a runtime error or undefined symbol.

Would you like assistance creating a NewSwaggerHandler() function?

🧰 Tools
🪛 golangci-lint (1.62.2)

40-40: undefined: NewSwaggerHandler

(typecheck)

server/v2/api/swagger/server.go Show resolved Hide resolved
server/v2/api/swagger/handler.go Fixed Show fixed Hide fixed

// Set caching headers
w.Header().Set("Cache-Control", "public, max-age=31536000")
w.Header().Set("Last-Modified", time.Now().UTC().Format(http.TimeFormat))

Check warning

Code scanning / CodeQL

Calling the system time Warning

Calling the system time may be a possible source of non-determinism
w.Header().Set("Last-Modified", time.Now().UTC().Format(http.TimeFormat))

// Serve the file
http.ServeContent(w, r, urlPath, time.Now(), file.(io.ReadSeeker))

Check warning

Code scanning / CodeQL

Calling the system time Warning

Calling the system time may be a possible source of non-determinism
@julienrbrt julienrbrt changed the title feat(server): Add Swagger UI support for server/v2 feat(server/v2): Add Swagger UI support for server/v2 Dec 28, 2024
)

// Handler returns an HTTP handler for Swagger UI
func Handler() http.Handler {
Copy link
Member

@julienrbrt julienrbrt Jan 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: let's not expose this and just use swaggerHandler{} in the handler registration

Copy link
Member

@julienrbrt julienrbrt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The swagger ui is passed nowhere, so this server will actually do nothing.
We should let the user pass its chain swagger ui / file at server instantiation.
For instance, a user could pass the default SDK swagger config (docs.SwaggerUI):

root, err := fs.Sub(docs.SwaggerUI, "swagger-ui")

@julienrbrt
Copy link
Member

Additionally, let's wire this server in simapp/v2 so we can test it out and be shown to users how it is wired.

@crStiv
Copy link
Author

crStiv commented Jan 6, 2025

Additionally, let's wire this server in simapp/v2 so we can test it out and be shown to users how it is wired.

@julienrbrt hey Julien, I've added some changes, is it what you asked for?

@julienrbrt
Copy link
Member

Additionally, let's wire this server in simapp/v2 so we can test it out and be shown to users how it is wired.

@julienrbrt hey Julien, I've added some changes, is it what you asked for?

Yes great, if you can create a doc.go showing how to wire this server/v2 and update simapp/v2 to wire it, then it looks good to me.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
server/v2/api/swagger/server.go (1)

27-33: Consider Enabling Concurrency or Non-Blocking Startup

Currently, ListenAndServe() is called directly, which blocks execution until the server shuts down or returns an error. If you need the application to continue executing other tasks, consider running the server in a goroutine or using a more sophisticated concurrency model.

 func (s *Server[T]) Start(ctx context.Context) error {
     if !s.config.Enable {
         s.logger.Info(fmt.Sprintf("%s server is disabled via config", s.Name()))
         return nil
     }

-    if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
+    go func() {
+        if err := s.server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
+            s.logger.Error("failed to start swagger server", "error", err)
+        }
+    }()
     return nil
 }
server/v2/api/swagger/config.go (1)

7-7: Remove Unused Import

The import "cosmossdk.io/core/server" is not used. Removing it will eliminate linter warnings and keep the code tidy.

-import "cosmossdk.io/core/server"
🧰 Tools
🪛 golangci-lint (1.62.2)

7-7: "cosmossdk.io/core/server" imported and not used

(typecheck)

🪛 GitHub Actions: Lint

[error] 7-7: "cosmossdk.io/core/server" imported and not used

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d0c20bc and 654cc99.

📒 Files selected for processing (4)
  • server/v2/api/swagger/config.go (1 hunks)
  • server/v2/api/swagger/handler.go (1 hunks)
  • server/v2/api/swagger/server.go (1 hunks)
  • simapp/v2/app.go (2 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
server/v2/api/swagger/handler.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/api/swagger/config.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

simapp/v2/app.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/api/swagger/server.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

🪛 GitHub Actions: Dependency Review
server/v2/api/swagger/handler.go

[error] 10-10: Missing required module: github.com/rakyll/statik/fs. Module needs to be added to the project dependencies.

🪛 golangci-lint (1.62.2)
server/v2/api/swagger/config.go

7-7: "cosmossdk.io/core/server" imported and not used

(typecheck)

simapp/v2/app.go

212-212: app.App.AddServer undefined (type *"cosmossdk.io/runtime/v2".App[T] has no field or method AddServer)

(typecheck)

🪛 GitHub Actions: Lint
server/v2/api/swagger/config.go

[error] 7-7: "cosmossdk.io/core/server" imported and not used

🪛 GitHub Actions: Build SimApp
simapp/v2/app.go

[error] 33-33: Cannot find module providing package cosmossdk.io/client/docs: import lookup disabled by -mod=readonly

🪛 GitHub Actions: v2 core Tests
simapp/v2/app.go

[error] 33-33: Cannot find module providing package cosmossdk.io/client/docs: import lookup disabled by -mod=readonly

⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: tests (03)
  • GitHub Check: tests (02)
  • GitHub Check: tests (00)
  • GitHub Check: test-integration
  • GitHub Check: Analyze
  • GitHub Check: Summary
🔇 Additional comments (1)
server/v2/api/swagger/server.go (1)

14-17: Interface Conformance Looks Good

Declaring interface compliance at compile-time is a neat way to ensure that your Server[T] implements the required methods. This is a great practice.

Comment on lines +190 to +214
// Creating and Adding a Swagger Server
swaggerLogger := logger.With(log.ModuleKey, "swagger")
swaggerCfg := server.ConfigMap{
"swagger": map[string]any{
"enable": true,
"address": "localhost:8080",
"path": "/swagger/",
},
}

swaggerServer, err := swaggerv2.New[T](
swaggerLogger,
swaggerCfg,
swaggerv2.CfgOption(func(cfg *swaggerv2.Config) {
cfg.SwaggerUI = docs.SwaggerUI
}),
)
if err != nil {
return nil, fmt.Errorf("failed to create swagger server: %w", err)
}

// Adding a Swagger server to the application
if err := app.App.AddServer(swaggerServer); err != nil {
return nil, fmt.Errorf("failed to add swagger server: %w", err)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Resolve AddServer Method or Provide an Alternative Integration

Static analysis indicates that app.App.AddServer is not defined on the *runtime.App[T]. Ensure you have a corresponding method or consider integrating the Swagger server differently.

- if err := app.App.AddServer(swaggerServer); err != nil {
-     return nil, fmt.Errorf("failed to add swagger server: %w", err)
- }
+ // Uncomment or modify once AddServer is correctly implemented on *runtime.App[T].
+ // if err := app.App.AddServer(swaggerServer); err != nil {
+ //     return nil, fmt.Errorf("failed to add swagger server: %w", err)
+ // }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Creating and Adding a Swagger Server
swaggerLogger := logger.With(log.ModuleKey, "swagger")
swaggerCfg := server.ConfigMap{
"swagger": map[string]any{
"enable": true,
"address": "localhost:8080",
"path": "/swagger/",
},
}
swaggerServer, err := swaggerv2.New[T](
swaggerLogger,
swaggerCfg,
swaggerv2.CfgOption(func(cfg *swaggerv2.Config) {
cfg.SwaggerUI = docs.SwaggerUI
}),
)
if err != nil {
return nil, fmt.Errorf("failed to create swagger server: %w", err)
}
// Adding a Swagger server to the application
if err := app.App.AddServer(swaggerServer); err != nil {
return nil, fmt.Errorf("failed to add swagger server: %w", err)
}
// Creating and Adding a Swagger Server
swaggerLogger := logger.With(log.ModuleKey, "swagger")
swaggerCfg := server.ConfigMap{
"swagger": map[string]any{
"enable": true,
"address": "localhost:8080",
"path": "/swagger/",
},
}
swaggerServer, err := swaggerv2.New[T](
swaggerLogger,
swaggerCfg,
swaggerv2.CfgOption(func(cfg *swaggerv2.Config) {
cfg.SwaggerUI = docs.SwaggerUI
}),
)
if err != nil {
return nil, fmt.Errorf("failed to create swagger server: %w", err)
}
// Adding a Swagger server to the application
// Uncomment or modify once AddServer is correctly implemented on *runtime.App[T].
// if err := app.App.AddServer(swaggerServer); err != nil {
// return nil, fmt.Errorf("failed to add swagger server: %w", err)
// }
🧰 Tools
🪛 golangci-lint (1.62.2)

212-212: app.App.AddServer undefined (type *"cosmossdk.io/runtime/v2".App[T] has no field or method AddServer)

(typecheck)

"strings"
"time"

"github.com/rakyll/statik/fs"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add Required Dependency for Statik

The pipeline indicates that the module github.com/rakyll/statik/fs is missing from project dependencies. Update your go.mod by explicitly adding this dependency to avoid build failures.

Would you like assistance creating a diff to add github.com/rakyll/statik to your go.mod file?

🧰 Tools
🪛 GitHub Actions: Dependency Review

[error] 10-10: Missing required module: github.com/rakyll/statik/fs. Module needs to be added to the project dependencies.

@crStiv
Copy link
Author

crStiv commented Jan 6, 2025

@julienrbrt made an update, is this doc pretty clear to understand?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't how you add server, this should be done in commands.go of simapp/v2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C:server/v2 api C:server/v2 Issues related to server/v2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Default Swagger support in server/v2?
2 participants